import * as Taro from '@tarojs/taro'
import { create } from 'zustand'

// TabBar 项目接口定义
export interface TabBarItem {
  title: string
  path: string
  icon?: React.ReactNode
}

// TabBar 状态接口定义
interface TabBarState {
  // 当前激活的 tab 索引
  activeIndex: number
  // TabBar 配置列表
  tabList: TabBarItem[]
  // 是否显示 TabBar
  visible: boolean
  // 设置激活的 tab
  setActiveIndex: (index: number) => void
  // 切换到指定 tab
  switchTab: (index: number) => void
  // 根据路径切换 tab
  switchTabByPath: (path: string) => void
  // 设置 TabBar 显示/隐藏
  setVisible: (visible: boolean) => void
  // 获取当前页面对应的 tab 索引
  getCurrentTabIndex: () => number
  // 初始化 TabBar（根据当前页面设置激活状态）
  initTabBar: () => void
}

// TabBar 配置列表
const DEFAULT_TAB_LIST: TabBarItem[] = [
  {
    title: '首页',
    path: '/pages/home/index',
  },
  {
    title: '订单',
    path: '/pages/order/index',
  },
  {
    title: '问题',
    path: '/pages/question/index',
  },
  {
    title: '我的',
    path: '/pages/profile/index',
  },
]

// 创建 TabBar Store
export const useTabBarStore = create<TabBarState>((set, get) => ({
  activeIndex: 0,
  tabList: DEFAULT_TAB_LIST,
  visible: true,

  // 设置激活的 tab 索引
  setActiveIndex: (index: number) => {
    set({ activeIndex: index })
  },

  // 切换到指定 tab
  switchTab: (index: number) => {
    const { tabList, activeIndex } = get()
    if (index >= 0 && index < tabList.length && index !== activeIndex) {
      const targetTab = tabList[index]

      // 获取当前页面路径
      const pages = Taro.getCurrentPages()
      const currentPath = pages.length > 0 ? `/${pages[pages.length - 1].route}` : ''

      // 如果已经在目标页面，只更新状态
      if (currentPath === targetTab.path) {
        set({ activeIndex: index })
        console.log(`已在 ${targetTab.title} 页面`)
        return
      }

      // 更新状态
      set({ activeIndex: index })

      // 使用 redirectTo 替换当前页面（适用于自定义 TabBar）
      Taro.redirectTo({
        url: targetTab.path,
        success: () => {
          console.log(`成功切换到 ${targetTab.title}`)
        },
        fail: (err) => {
          console.error('页面跳转失败:', err)
          // 如果 redirectTo 失败，尝试使用 navigateTo
          Taro.navigateTo({
            url: targetTab.path,
            success: () => {
              console.log(`使用 navigateTo 成功跳转到 ${targetTab.title}`)
            },
            fail: (navErr) => {
              console.error('navigateTo 也失败了:', navErr)
            },
          })
        },
      })
    }
  },

  // 根据路径切换 tab
  switchTabByPath: (path: string) => {
    const { tabList } = get()
    const index = tabList.findIndex((item) => item.path === path)
    if (index >= 0) {
      get().switchTab(index)
    }
  },

  // 设置 TabBar 显示/隐藏
  setVisible: (visible: boolean) => {
    set({ visible })
  },

  // 获取当前页面对应的 tab 索引
  getCurrentTabIndex: () => {
    const { tabList } = get()

    try {
      const pages = Taro.getCurrentPages()
      if (pages.length > 0) {
        const currentPage = pages[pages.length - 1]
        const currentPath = `/${currentPage.route}`
        const index = tabList.findIndex((item) => item.path === currentPath)
        return index >= 0 ? index : 0
      }
    } catch (error) {
      console.warn('获取当前页面失败:', error)
    }

    return 0
  },

  // 初始化 TabBar（根据当前页面设置激活状态）
  initTabBar: () => {
    const currentIndex = get().getCurrentTabIndex()
    if (currentIndex !== undefined) {
      set({ activeIndex: currentIndex })
    }
  },
}))

// 导出便捷的 hooks
export const useTabBarActions = () => {
  const { switchTab, switchTabByPath, setVisible, setActiveIndex, initTabBar } = useTabBarStore()
  return {
    switchTab,
    switchTabByPath,
    setVisible,
    setActiveIndex,
    initTabBar,
  }
}

export const useTabBarState = () => {
  const { activeIndex, tabList, visible } = useTabBarStore()
  return {
    activeIndex,
    tabList,
    visible,
  }
}
